package com.cskaoyan.javase.oop1._11static._3usecase;

/**
 * static关键字有什么具体的使用场景呢？
 * 这里，根据static关键字的一些特点来明确它的使用场景，
 *      给大家以后使用static关键字做一下参考。
 *
 * 静态成员变量：
 *      1.属于全体对象所共享而不是独属于某个对象的成员变量
 * 所以当存在需要所有对象共享的变量时，应该使用static修饰的静态成员变量。
 *
 *      2.在整个类全局独一份的（因为类加载只有一次）
 * 所以，如果希望某个变量在类的全局独一份时，应该使用static修饰的静态成员变量。
 *
 * 静态成员方法：
 *      静态方法的最主要特点就是调用简单，无需创建对象即可调用。
 * 所以如果希望一个方法能够更方便快捷的去调用，可以把它声明为static修饰的静态成员方法。
 *
 * 根据静态成员方法调用简单的特点，当一个类中全部都是静态成员方法时，
 * 类中的所有方法的调用都可以使用类名点去完成，这就是Java当中的"工具类"。
 * 工具类当中的所有方法都是静态方法,方便被调用.
 * 比较典型的有：数组工具类Arrays、集合工具类Collections、数学工具类Math等等。
 *      对象工具类Objects
 *
 * 最后，还可以使用静态成员方法给静态成员变量赋值。
 * 但是一定要注意，静态成员方法不调用不执行，要想依赖静态方法完成赋值，必须主动调用该方法。
 *
 * @since 10:57
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            Teacher t = new Teacher();
            System.out.println("第" + (i + 1) + "个对象的id是" + t.id);
        }
        System.out.println(Teacher.count);
    }
}

class Teacher {
    int id;
    /*
        需求1:
            请在Teacher类的外部,统计new Teacher类对象的次数
        统计次数,需要计数器(需要一个变量,每创建一个对象,就加1)
        那么这个变量是什么变量?
        这里需要一个在类的全局独一份的变量,"全局变量"
        需要一个静态成员变量

        然后在创建器中写累加语句即可
     */
    static int count = 0;
    /*
        需求2:
            new教师对象需要给教师对象一个编号
            这个编号从1开始,每创建一个对象,编号加1
        怎么做?
            全体教师对象的编号,有一个初始值是1,需要一个变量存储
            而且这个编号随着创建对象加1
            这个变量必须在类的全局唯一,且被全体对象共享
            它是一个静态成员变量
        id赋值语句应该写在构造器里
            且和累加语句写在一起.
     */
    static int initId = 1;

    public Teacher() {
        count++;
        // id = initId++;
        id = initId;
        initId++;
    }


}
